//using System;
//using System.Runtime.CompilerServices;
//using System.Runtime.InteropServices;

//namespace Windows7.DesktopIntegration.Interop
//{
//    [ComImport,
//     Guid(IIDGuid.IShellLibrary),
//     InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
//    internal interface IShellLibrary
//    {
//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void LoadLibraryFromItem(
//                    [In, MarshalAs(UnmanagedType.Interface)] IShellItem library,
//                    [In] SafeNativeMethods.StorageInstantiationModes grfMode);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void LoadLibraryFromKnownFolder(
//                    [In] ref Guid knownfidLibrary,
//                    [In] SafeNativeMethods.StorageInstantiationModes grfMode);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void AddFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem location);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void RemoveFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem location);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void GetFolders(
//                    [In] SafeNativeMethods.LIBRARYFOLDERFILTER lff,
//                    [In] ref Guid riid,
//                    [MarshalAs(UnmanagedType.Interface)] out IShellItemArray ppv);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void ResolveFolder(
//                    [In, MarshalAs(UnmanagedType.Interface)] IShellItem folderToResolve,
//                    [In] uint timeout,
//                    [In] ref Guid riid,
//                    [MarshalAs(UnmanagedType.Interface)] out IShellItem ppv);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void GetDefaultSaveFolder(
//                    [In] SafeNativeMethods.DEFAULTSAVEFOLDERTYPE dsft,
//                    [In] ref Guid riid,
//                    [MarshalAs(UnmanagedType.Interface)] out IShellItem ppv);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void SetDefaultSaveFolder(
//                    [In] SafeNativeMethods.DEFAULTSAVEFOLDERTYPE dsft,
//                    [In, MarshalAs(UnmanagedType.Interface)] IShellItem si);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void GetOptions(
//                    out SafeNativeMethods.LIBRARYOPTIONFLAGS lofOptions);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void SetOptions(
//                    [In] SafeNativeMethods.LIBRARYOPTIONFLAGS lofMask,
//                    [In] SafeNativeMethods.LIBRARYOPTIONFLAGS lofOptions);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void GetFolderType(out Guid ftid);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void SetFolderType([In] ref Guid ftid);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void GetIcon([MarshalAs(UnmanagedType.LPWStr)] out string icon);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void SetIcon([In, MarshalAs(UnmanagedType.LPWStr)] string icon);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void Commit();

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void Save(
//                    [In, MarshalAs(UnmanagedType.Interface)] IShellItem folderToSaveIn,
//                    [In, MarshalAs(UnmanagedType.LPWStr)] string libraryName,
//                    [In] SafeNativeMethods.LIBRARYSAVEFLAGS lsf,
//                    [MarshalAs(UnmanagedType.Interface)] out IShellItem savedTo);

//        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
//        void SaveInKnownFolder(
//                    [In] ref Guid kfidToSaveIn,
//                    [In, MarshalAs(UnmanagedType.LPWStr)] string libraryName,
//                    [In] SafeNativeMethods.LIBRARYSAVEFLAGS lsf,
//                    [MarshalAs(UnmanagedType.Interface)] out IShellItem savedTo);
//    };
//}